package com.example.administrator.kotlintutorial

/**
 * Created by chensuilun on 2019/2/20.
 */
class InnerClass {
    // 目标源码
    //    public final void testAnonymous() {
//        IntRef i = new IntRef();  // static final class
//        i.element = 0;
//        InnerClass$testAnonymous$obj$1 obj = new InnerClass$testAnonymous$obj$1(i);
//        i.element++;
//        obj.inc();
//        System.out.println(i.element);
//    }
//
//    public final class InnerClass$testAnonymous$obj$1 {
//        final /* synthetic */ IntRef $i;
//
//        InnerClass$testAnonymous$obj$1(IntRef $captured_local_variable$0) {
//            this.$i = $captured_local_variable$0;
//        }
//
//        public final void inc() {
//            IntRef intRef = this.$i;
//            intRef.element++;
//        }
//    }
    fun testAnonymous() {
        var i = 0
//        val i = 0
        val obj = object {
            fun inc() {
                // 为什么不是 final 也能编译通过？因为实际操作的是 IntRef 类的成员变量，而 IntRef 类是用 final 修饰的
                i++
            }
        }
        i++
        obj.inc()
        println(i)
    }
}